package com.xyy.saas.payment.adpater.fumin.util;

import com.alibaba.fastjson.JSONObject;

/**
 * @author wangtianqi
 */
public class SerialNoUtil {

     /** 请求流水号 */
    private static final String CLIENT_SERIAL_NO = "client_serial_no";

    private static final int SERIAL_NO_MIN_LENGTH = 6;

    /**
     * 获取请求流水号
     *
     * @param json 请求参数
     * @return 流水号
     */
    public static String calculateSerialNo(String json) {
        String clintSerialNo = "";
        if (null != json) {
            JSONObject jsonObject = JSONObject.parseObject(json);
            if (null != jsonObject) {
                clintSerialNo = jsonObject.getString(CLIENT_SERIAL_NO);
            }
        }
        if (null == clintSerialNo || clintSerialNo.isEmpty()) {
            clintSerialNo = "sn" + SnowflakeIdWorkerUtil.nextId();
        }
        checkoutSerialNo(clintSerialNo);
        return clintSerialNo;
    }

    /**
     * 校验流水号
     *
     * @param serialNo 当前流水号
     */
    private static void checkoutSerialNo(String serialNo) {
        if (null == serialNo || "".equals(serialNo)) {
            throw new IllegalArgumentException("the client_serial_no should not be empty");
        }

        if (serialNo.length() < SERIAL_NO_MIN_LENGTH) {
            throw new IllegalArgumentException("the length of client_serial_no is not allowed");
        }
    }
}
